package com.chen.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.chen.base.utils.R;
import com.chen.dto.StudentDTO;
import com.chen.dto.StudentExamChartDTO;
import com.chen.dto.StudentLoginDTO;
import com.chen.dto.StudentRegisterDTO;
import com.chen.entity.Student;
import com.chen.vo.StudentLoginVO;
import com.chen.vo.StudentVO;

import java.util.List;

/**
 * 学生相关服务
 */
public interface StudentService extends IService<Student> {

    /**
     * 通过账号检查学生登陆账号是否可用
     * @param account
     * @return
     */
    public R validateLogin(String account);

    /**
     * 学生登陆相关逻辑实现
     * @param studentLoginDTO
     * @return
     */
    public StudentLoginVO studentLogin(StudentLoginDTO studentLoginDTO);

    /**
     * 判断该学生账号是否已经被注册
     * @param account
     * @return
     */
    public boolean checkAccountIsExists(String account);

    /**
     * 注册学生账号
     * @param studentRegisterDTO
     * @return
     */
    public boolean studentRegister(StudentRegisterDTO studentRegisterDTO);

    /**
     * 学生查询个人信息
     * @param studentId
     * @return
     */
    public StudentVO selfInfo(Integer studentId);

    /**
     * 根据班级查询
     * @param classId
     * @return
     */
    public List<StudentVO> getStudentsByClassId(Integer classId);

    /**
     * 图表数据
     * @param classId
     * @return
     */
    public List<StudentExamChartDTO> getStudentsByClassIdCharData(Integer classId);

    /**
     * 重置学生账号
     * @param id
     * @param pwd
     * @return
     */
    public Integer resetPwd(Integer id, String pwd);

    /**
     * 学生总人数
     * @return
     */
    public Long findAllCount();

    /**
     * 分页查询学生信息
     * @param id
     * @param classId
     * @param gradeId
     * @param startIndex
     * @param pageShow
     * @return
     */
    public List<StudentVO> listPage(Integer id,Integer classId,Integer gradeId,Integer startIndex, Integer pageShow);

    /**
     * 根据学生id获取学生详细信息
     * @param studentId
     * @return
     */
    public StudentVO getStudentById(Integer studentId);

    /**
     * 修改学生信息
     * @param studentDTO
     * @return
     */
    public Integer updateStudent(StudentDTO studentDTO);

    /**
     * 删除学生信息
     * @param studentId
     * @return
     */
    public Integer delStudent(Integer studentId);

}
